home *** CD-ROM | disk | FTP | other *** search
- /* Copyright 1990 by Christopher A. Wichura.
- See file GIFMachine.doc for full description of rights.
- */
-
- #include "GIFMachine.h"
-
- struct MinList CommentList;
- static UBYTE buf[256];
-
- BOOL DoExtension(BPTR fh)
- {
- register LONG size;
- register LONG cmdcode;
- register char *Comment;
- register char *OldComment;
- register int CommentLength;
- register int OldCommentLength;
- register struct CommentNode *cn;
-
- if ((cmdcode = FGetC(fh)) == -1) {
- PutStr("...I/O error reading extension block function code\n");
- return TRUE;
- }
-
- switch(cmdcode) {
- case GIF_COMMENT_EXT:
- PutStr("...Comment extension encountered. Contents will be stored in an ANNO chunk.\n");
-
- if (!(cn = (struct CommentNode *)MyAlloc(sizeof(struct CommentNode)))) {
- PutStr("......Out of memory allocating comment block.\n");
- return TRUE;
- }
-
- Comment = NULL;
- CommentLength = 0;
-
- for (;;) {
- if ((size = FGetC(fh)) == -1) {
- PutStr("......I/O Error reading comment block.\n");
- return TRUE;
- }
-
- if (size) {
- if (FRead(fh, buf, 1, size) != size) {
- PutStr("......I/O Error reading comment block.\n");
- return TRUE;
- }
-
- OldComment = Comment;
- OldCommentLength = CommentLength;
- CommentLength += size;
-
- if (!(Comment = MyAlloc(CommentLength))) {
- PutStr("......Out of memory allocating comment block.\n");
- return TRUE;
- }
-
- if (OldCommentLength) {
- CopyMem(OldComment, Comment, OldCommentLength);
- MyFree(OldComment);
- }
-
- CopyMem(buf, &Comment[OldCommentLength], size);
- } else { /* end of comment so store it */
- cn->cn_Comment = Comment;
- cn->cn_CommentLength = CommentLength;
- AddTail((struct List *)&CommentList, (struct Node *)cn);
- return FALSE;
- }
- }
- break;
-
- default:
- MyPrintf("...Extension block function code #%ld not know, skipping.\n",
- cmdcode);
-
- /* we must skip over any data for the extension block */
- for (;;) {
- if ((size = FGetC(fh)) == -1) {
- PutStr("...I/O Error skipping unknown extension block.\n");
- return TRUE;
- }
-
- if (size == 0)
- return FALSE;
-
- if (FRead(fh, buf, 1, size) != size) {
- PutStr("...I/O Error skipping unknown extension block.\n");
- return TRUE;
- }
- }
- break;
- }
- }
-